<?php

class Remanejamento_InscricaoController extends Zend_Controller_Action
{

    /**
     * Verifica, para todas as etapas, a existencia de inscrição ativa.
     * 
     * @var boolean 
     */
    public $stInscricao;
    
    public function init()
    {
        $this->_helper->layout
                      ->setLayoutPath(APPLICATION_PATH . '/modules/remanejamento/layouts/scripts')
                      ->setLayout('remanejamento');
        
        // Verifica se existe inscrição ativa...
        $modelInsc          = new Remanejamento_Model_Inscricao();
        $session            = $modelInsc->getSessaoInscricao('user');
        $cdMatricula        = isset($session['matricula']) ? $session['matricula'] : null;
        $this->stInscricao  = $modelInsc->verificaExistenciaInscricao($cdMatricula, 2013);      
        $action             = $this->_getParam('action');

        // Se já tem inscrição ativa, renderiza a primeira etapa com tratamentos necessários.
        if ($this->stInscricao === true && $action !== 'etapa1') {
            $this->_helper->redirector('etapa1');
        }
        
//        $this->stInscricao = false;
    }

    
    //ACTION: apenas redirecionar, mater a index para organizaçao do primeiro acesso
    public function indexAction()
    {
        $this->_helper->redirector('etapa1');
    }

    
    //ACTION: responsável pelo inicio da inscriçao do professor.
    public function etapa1Action()
    {
        // Model, formulário e variáveis importantes desta action...
        $formEpt1   = new Remanejamento_Form_InscricaoEtp1();
        $modelInsc  = new Remanejamento_Model_Inscricao();
        $etp1       = $modelInsc->getSessaoInscricao('etp1');
        $session    = !empty($etp1) ? $etp1 : $modelInsc->getSessaoInscricao('user');
        
        // Verifica se a pessoa já possui algum cadastro
        if ($this->stInscricao === false) {
            $post       = $this->getRequest()->getPost();

            // Verifica se o usuário esta tentando salvar novas informações
            if (!empty($post)) {
                if ($formEpt1->isValid($post)) {
                    $modelInsc->setSessaoInscricao('etp1', $post);
                    $this->_helper->redirector('etapa2');
                }
            } else {
                // Envia valores para o formulário, caso já exista    
                $post = $session;
            }

            $this->view->existeInscricao = false;
            $this->view->formEtp1        = $formEpt1->populate($post);
            
        } else {
            $this->view->existeInscricao = true;
        }
    }

    
    //ACTION: responsável pela parte de habilidades do usuário
    public function etapa2Action()
    {
        $formEpt2   = new Remanejamento_Form_InscricaoEtp2();
        $modelInsc  = new Remanejamento_Model_Inscricao();
        $post       = $this->getRequest()->getPost();
        $redirect   = $modelInsc->verificarAcessoEtapa();
        $session    = $modelInsc->getSessaoInscricao('etp2');

        // Verifica se o usuário esta tentando salvar novas informações
        if (!empty($post)) {    
            if (count($formEpt2->populate($post)->getValue('habilitacoes')) == 0 || count($formEpt2->populate($post)->getValue('habilitacoes')) > 2) {
                $formEpt2->getElement('habilitacoes')->setErrors(array(''));
                $formEpt2->markAsError();
                $this->view->msgError = 'Escolha no mínimo 1 e no máximo 2 habilidades';
                
            }
            
            if ($formEpt2->isValid($post)) {
                $modelInsc->setSessaoInscricao('etp2', $post);
                $this->_helper->redirector('etapa3');
            }
        } else {
            // Se a sessão estiver vazia então retorne para o local que o usúario tem acesso.
            if (empty($session) && ($redirect['etapaMax'] < 'etapa2')) {
                $this->_helper->redirector($redirect['etapaMax']);
            }

            // Envia valores para o formulário, caso já exista    
            $post = $session;
        }

        $this->view->formEtp2       = $formEpt2->populate($post);
        $this->view->lstHabilidades = $formEpt2->getElement('habilitacoes')->getMultiOptions();
    }
    

    //ACTION: responsável pela parte de lotação dos servidores
    public function etapa3Action()
    {
        $formEpt3   = new Remanejamento_Form_InscricaoEtp3();
        $modelInsc  = new Remanejamento_Model_Inscricao();
        $post       = $this->getRequest()->getPost();
        $redirect   = $modelInsc->verificarAcessoEtapa();
        $session    = $modelInsc->getSessaoInscricao('etp3');

        // Verifica se o usuário esta tentando salvar novas informações
        if (!empty($post)) {
            if ($formEpt3->isValid($post)) {
                $modelInsc->setSessaoInscricao('etp3', $post);
                $this->_helper->redirector('etapa4');
            }
        } else {
            // Se a sessão estiver vazia então retorne para o local que o usúario tem acesso.
            if (empty($session) && ($redirect['etapaMax'] < 'etapa3')) {
                $this->_helper->redirector($redirect['etapaMax']);
            }

            // Envia valores para o formulário, caso já exista    
            $post = $session;
        }

        $this->view->formEtp3 = $formEpt3;
    }

    
    //ACTION: responsável pela parte de lotação dos servidores
    public function etapa4Action()
    {
        $formEtp4   = new Remanejamento_Form_InscricaoEtp4();
        $modelInsc  = new Remanejamento_Model_Inscricao();
        $post       = $this->getRequest()->getPost();
        $redirect   = $modelInsc->verificarAcessoEtapa();
        $session    = $modelInsc->getSessaoInscricao('etp4');
        $etp1       = $modelInsc->getSessaoInscricao('etp1');

        // Verifica se o usuário esta tentando salvar novas informações
        if (!empty($post)) {
            if ($formEtp4->isValid($post)) {
                if ($this->validarEtapa4($post, $etp1) === true) {
                    $modelInsc->setSessaoInscricao('etp4', $post);
                    $this->_helper->redirector('etapa5');

                } else {
                    $formEtp4->getElement('cordenacaoEnsino')->setErrors(array(''));
                    $formEtp4->markAsError();
                    $this->view->msgError = 'Escolha no mínimo 1 e no máximo 3 Coordenações de ensino';   
                }                
            }
            
        } else {
            // Se a sessão estiver vazia então retorne para o local que o usúario tem acesso.
            if (empty($session) && ($redirect['etapaMax'] < 'etapa4')) {
                $this->_helper->redirector($redirect['etapaMax']);
            }

            // Envia valores para o formulário, caso já exista    
            $post = $session;
        }

        $this->view->formEtp4 = $formEtp4->populate($post);
    }
    
    
    /**
     * Verifica se as informações da etapa 4 estao corretas de acordo com as regras de negócio.
     * @param array $post
     * @param array $etp1
     * @return boolean
     */
    public function validarEtapa4($post, $etp1) 
    {
        if (count($post['cordenacaoEnsino']) == 0) {
            return false;
            
        } elseif (count($post['cordenacaoEnsino']) > 3) {
            return false;
            
        } elseif ($post['tpRemanejamento'] == "1") {
            if (count($post['cordenacaoEnsino']) > 1) {
                return false;
                
            } elseif ($post['cordenacaoEnsino'][0] != $etp1['emp_dr'].'_'.$etp1['tp_lotacao_1']) {
                return false;
            }
            
        } elseif ($post['tpRemanejamento'] == "3") {
            if (!in_array($etp1['emp_dr'].'_'.$etp1['tp_lotacao_1'], $post['cordenacaoEnsino'])) {
                return false;
            }
        }
        
        return true;
    }
    
    
    //ACTION: etapa5 é a finalização da inscrição
    public function etapa5Action() 
    {
        // Desabilita o layout e garante que não irá renderizar o phtml correspondente
        $this->_helper->viewRenderer->setNoRender(true);
        $this->_helper->layout->disableLayout();        
        
        // Pegando informações do formulário
        $formEtp1   = new Remanejamento_Form_InscricaoEtp1();
        $formEtp2   = new Remanejamento_Form_InscricaoEtp2();
        $formEtp3   = new Remanejamento_Form_InscricaoEtp3();
        $formEtp4   = new Remanejamento_Form_InscricaoEtp4();
        $modelInsc  = new Remanejamento_Model_Inscricao();

        // Verifica se todos os dados foram enviados de forma correta, caso não esteja irá retornar para o formulário com problemas
        if (!$formEtp1->isValid($modelInsc->getSessaoInscricao('etp1'))) {
            $this->_helper->redirector('etapa1');
        } elseif (!$formEtp2->isValid($modelInsc->getSessaoInscricao('etp2'))) {
            $this->_helper->redirector('etapa2');
        } else if (!$formEtp3->isValid($modelInsc->getSessaoInscricao('etp3'))) {
            $this->_helper->redirector('etapa3');
        } else if (!$formEtp4->isValid($modelInsc->getSessaoInscricao('etp4'))) {
            $this->_helper->redirector('etapa4');
        }
        
        // Se o usuário não for redirecionado entao o sistema irá validar a inscricao
        $result = $modelInsc->finalizarInscricao();
        
        if ($result['type'] == 'success') {
            // Redireciona o usuário ara a tela de comprovante de inscrição.
            $this->_helper->redirector('visualizar', 'comprovante', 'remanejamento');            
        } else {
            Zend_Debug::dump($result);
        }
    }
    
        
    //ACTION: Responsável por listar os professores existentes no banco e suas informações quando for selecionado
    private function buscarPessoaAction() 
    {
        // Action desativada....
        die('action desativada');
        
        $modelProfessor = new Remanejamento_Model_Professor();
        $result           = array();
        
        /** @todo o banco salvou o CPF das pessoas excluindo os zeros a esquerda, verificar qual o filtro utilizar */
        $term           = Zend_Filter::filterStatic($this->_getParam('term'), 'Digits', array(true));
        
        // Verificar se na busca tem pelo menos 2 caracteres.
        if (strlen($term) >= 7) {
            $result   = $modelProfessor->completeProfessor($term);  
        }
        
        // Retorna o conteúdo e mata o processo
        echo $this->_helper->json($result);
    }
}